1. 配置系统代理
在 Linux 中使用 Clash | CodeSwift (iswiftai.com)
科学上网配置完毕之后,先通过 clash 脚本启动服务,然后再 export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890
2. Docker Daemon - 代理拉取或推送国外镜像
Docker 守护程序(dockerd)是在启动环境中使用 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY 环境变量来配置 HTTP 或 HTTPS 代理行为,需要在 Docker systemd 服务文件中添加配置。 在 daemon.json 文件或者是在系统环境变量文件中配置它们都不会使其生效。
要实现 Daemon 代理会比较复杂一些,并且下面的操作将覆盖默认的 docker.service 文件,这样当 Docker 启动的时候就会读取到下面的代理配置信息:
# 1. 创建 docker.service.d 目录
sudo mkdir -p /etc/systemd/system/docker.service.d
# 2. 在该目录下创建 http-proxy.conf 文件
sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf
# 3. 编辑http-proxy.conf并添加下面的内容。并根据自身需要替换为实际的配置,一般只需要添加 HTTP_PROXY 和 HTTPS_PROXY。(HTTP_PROXY 用于代理访问 http 请求,HTTPS_PROXY 用于代理访问 https 请求,如果想某个 IP或域名不走代理则配置到 NO_PROXY中。)
vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
# 4. 刷新更改并重新启动 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
3. Container - 容器内部代理访问国外资源
该代理只针对于后续 build 或 run 的容器有效,已经创建好的不受影响。主要是用于容器内部的网络访问。本身容器就可以当做一个简化版的 Linux 系统,如果想实现容器内部的代理,则必须在容器内设置适当的环境变量。直接在容器内部进行修改,虽然也可以这样做,但是不是很推荐,如果不是测试使用,最好还是保证容器的完整性。如果是想要将该容器导出并移植到其他机器上去的话,那肯定是在容器内部修改环境变量导出。
在 Docker 17.06 及更早版本中,可以在构建映像(这会降低映像的可移植性)或创建或运行容器时通过指定参数来执行此操作。在 Docker 17.07 及更高版本中,Docker 提供了一个全局的配置,可以通过配置 Docker 客户端以自动将代理信息传递给容器,从而让所有的容器内部都支持代理访问。
这里主要说一下 Docker 17.07 及更高版本中的全局配置:
# 1. 在 Docker 客户端上,在启动容器的用户的主目录中创建或编辑文件 /.docker/config.json。 如果没有该目录或文件则使用相应的用户来创建。
mkdir ~/.docker # 创建目录
touch ~/.docker/config.json # 创建文件
# 2. 编辑配置文件,根据自身需要添加下面的内容并替换为实际的配置,一般只需要添加 HTTP_PROXY 和 HTTPS_PROXY 即可,如果想某个 IP或域名不走代理则配置到 NO_PROXY中
vim ~/.docker/config.json
{
"proxies":
{
"default":
{
"httpProxy": "http://127.0.0.1:7890",
"httpsProxy": "http://127.0.0.1:7890",
"noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
}
}
}
# 3. 重新启动 Docker
sudo systemctl restart docker